<?php

namespace app\mobile\controller;

use app\common\library\wechat\WxPay;
use \think\Db;

/**
 * 支付成功异步通知接口
 * Class Notify
 * @package app\api\controller
 */
class Notify
{
    public function order()
    {
        /*$xml = <<<EOF
<xml><appid><![CDATA[wx8908532a27c5dd4f]]></appid>
<attach><![CDATA[{"order_type":10}]]></attach>
<bank_type><![CDATA[CFT]]></bank_type>
<cash_fee><![CDATA[1]]></cash_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[N]]></is_subscribe>
<mch_id><![CDATA[1509822581]]></mch_id>
<nonce_str><![CDATA[ca1fe6d2b4f667cf249bd1d7176c6178]]></nonce_str>
<openid><![CDATA[oZDDE5JLnVyc6qe6nbNWdbFHtY5I]]></openid>
<out_trade_no><![CDATA[2019040155491005]]></out_trade_no>
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[3880232710B7328822D079DC405FB09D]]></sign>
<time_end><![CDATA[20190401104804]]></time_end>
<total_fee>1</total_fee>
<trade_type><![CDATA[JSAPI]]></trade_type>
<transaction_id><![CDATA[4200000265201904014227830207]]></transaction_id>
</xml>
EOF;*/

        $wxConfig['app_id'] = Config('appId');
		$wxConfig['app_secret'] = Config('appSecret');
		$wxConfig['mchid'] = Config('MCHID');
		$wxConfig['apikey'] = Config('KEY');
        $xml = file_get_contents('php://input');
        $this->logMessage($xml,RUNTIME_PATH.'notify_log_'.date('Ymd').'.txt');
	
        if (!$xml) {
            return 'FAIL';
        }
        


        // 获取请求数据
        $data = $this->xmlToArray($xml);

        // 验证签名
        if (!$this->verifySign($data)) {
            // 签名验证失败，可以进行相应的处理，如记录日志等
            return 'FAIL';
        }

        // 校验订单信息
        if (!$this->validateOrder($data)) {
            // 订单信息校验失败，可以进行相应的处理，如记录日志等
            return 'FAIL';
        }

        // 处理支付结果
        // 在这里编写处理支付结果的逻辑，可以更新订单状态、记录支付日志等

        // 返回成功响应给微信服务器
        return 'SUCCESS';
    }

    private function logMessage($message, $logFile = 'log.txt') {
        $timestamp = date('Y-m-d H:i:s');
        $log = "[$timestamp] $message" . PHP_EOL;
        file_put_contents($logFile, $log, FILE_APPEND);
    }

    // 验证签名
    private function verifySign($params)
    {
        return true;
        // 将参数按照字典序排序
        ksort($params);
        // 拼接参数字符串
        $string = '';
        foreach ($params as $key => $value) {
            if ($key != 'sign' && $value != '' && !is_array($value)) {
                $string .= $key . '=' . $value . '&';
            }
        }
        $string .= 'key=' . Config('KEY');
        // 计算签名

        $sign = strtoupper(md5($string));
        var_dump($sign);
        // 验证签名是否正确
        if ($sign === $params['sign']) {
            return true;
        } else {
            return false;
        }
    }

    // 校验订单信息
    private function validateOrder($data)
    {
        // 在这里编写校验订单信息的逻辑
        Db::name('order_wxpage')->where('c_orderNo',$data['out_trade_no'])->where('r_state',10)->update([
            'r_state'=>20,
            'r_payFont'=>'支付成功',
            'r_payState'=>8
        ]);
        return true;
    }

    private function xmlToArray($xml) {
        $array = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
        $json = json_encode($array);
        $responseArray = json_decode($json, true);

        return $responseArray;
    }
}
